home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / pacworm.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-07-27  |  6.3 KB  |  170 lines

  1. 1  'PACWORM    Written by Richard Addison           on October 18, 1982
  2. 2  KEY OFF:SCREEN 0,1,0:WIDTH 40:SCREEN 0,1,0:COLOR 15,0,0:CLS:DEFINT A-Z
  3. 4  GOSUB 10900
  4. 10  DEFINT A-Z:DIM D(1023),X(3),Y(3),WS$(3,3),HEAD$(3):HISCORE!=100
  5. 20  RESTORE:Y(0)=-1:X(1)=1:Y(2)=1:X(3)=-1
  6. 30  FOR CD=0 TO 3:FOR ND=0 TO 3:READ WS$(CD,ND):NEXT:NEXT
  7. 32  FOR ND=0 TO 3:READ HEAD$(ND):NEXT
  8. 40  MOVE$=CHR$(0)+"H8"+CHR$(0)+"M6"+CHR$(0)+"P2"+CHR$(0)+"K4"+CHR$(0)+"R0"+CHR$(0)+"S."
  9. 90  COLOR 15,0,0:CLS
  10. 700  SCORE!=0:WORMS=2:PLUS=1:FIRST=-1:LEVEL=1:NXTWRM!=50
  11. 800  BDOOR=0:TOGO=10:EXTRA=0:GOSUB 5000
  12. 810  GOSUB 6000
  13. 900  HX=20:HY=21:HP=0:TX=HX:TY=HY:TP=0:CD=0:ND=0:ADD=7
  14. 980  FOR J=0 TO 1999:NEXT
  15. 990  COLOR 15:WHILE INKEY$<>"":WEND:GOTO 1100
  16. 1000  K$=INKEY$:MF=0:IF K$="" THEN 1100
  17. 1002  IF K$=" " THEN K$="":WHILE K$="":K$=INKEY$:WEND
  18. 1010  T=INSTR(MOVE$,K$):IF T=0 THEN 1000
  19. 1020  T=(T-1)\3:IF T=4 THEN ND=(CD-1)AND 3:GOTO 1100
  20. 1030  IF T=5 THEN ND=(CD+1)AND 3:GOTO 1100
  21. 1040  IF (T AND 1)<>(CD AND 1) THEN ND=T ELSE 1000
  22. 1100  COLOR 10:OY=HY:OX=HX:D(HP)=ND:HP=(HP+1)AND 1023
  23. 1110  HX=HX+X(ND):HY=HY+Y(ND):OLD=SCREEN(HY,HX)
  24. 1120  IF ADD THEN SOUND 220,0.4 ELSE SOUND 110,0.4
  25. 1130  LOCATE HY,HX:PRINT HEAD$(ND);:LOCATE OY,OX:IF GULP THEN PRINT"CSRLIN";:GULP=0 ELSE PRINT WS$(CD,ND);
  26. 1160  CD=ND:IF OLD=254 THEN ADD=ADD+7:GOSUB 6500:GULP=-1:GOTO 1200
  27. 1170  IF OLD<>32 THEN 2000
  28. 1180  IF HY<2 THEN 7000
  29. 1200  IF ADD>0 THEN ADD=ADD-1:GOTO 1300
  30. 1210  LOCATE TY,TX:PRINT" ";
  31. 1220  TX=TX+X(D(TP)):TY=TY+Y(D(TP)):TP=(TP+1)AND 1023
  32. 1230  IF FDOOR THEN GOSUB 5600
  33. 1300  IF BDOOR THEN 1400 ELSE CNT=CNT-1:IF CNT>0 THEN 1400
  34. 1310  CNT=2:COLOR 5:LOCATE 21,TIME+1:PRINT"CSRLIN";:TIME=TIME-1:IF TIME=0 THEN TOGO=TOGO+3:GOSUB 6000:GOSUB 6000:GOSUB 6000:GOSUB 6600:IF EXTRA<1 THEN EXTRA=4 ELSE EXTRA=EXTRA+3
  35. 1400  FOR J=0 TO 2^(7-LEVEL):NEXT:GOTO 1000
  36. 2000  SOUND 37,4:FIRST=0:GOSUB 6600:WORMS=WORMS-1:IF WORMS<0 THEN 2200
  37. 2100  LOCATE 25,7:COLOR 15:PRINT"PRESS <SPACE> TO CONTINUE";
  38. 2110  K$=INKEY$:IF K$=CHR$(27) THEN GOSUB 9000:GOTO 2200
  39. 2120  IF K$<>" " THEN 2110
  40. 2130  GOTO 800
  41. 2200  IF SCORE!>HISCORE! THEN HISCORE!=SCORE!
  42. 2202  COLOR 12:LOCATE 10,15:PRINT"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE
  43. 2204  LOCATE,15:PRINT"OPENGAME OVEROPEN
  44. 2206  LOCATE,15:PRINT"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD
  45. 2210  LOCATE 25,9:COLOR 15:PRINT"PRESS <ENTER> TO PLAY";
  46. 2220  K$=INKEY$:IF K$=CHR$(27) THEN 9000
  47. 2230  IF K$<>CHR$(13) THEN 2220
  48. 2240  GOTO 700
  49. 4000  GOSUB 5000:GOSUB 5500:END
  50. 5000  'MAKE PLAYING FIELD
  51. 5010  COLOR 5,0:CLS:OUT 984,32:PRINT STRING$(39,219);
  52. 5020  FOR I=2 TO 20:LOCATE I,1:PRINT"CSRLIN";:LOCATE I,39:PRINT"CSRLIN";:NEXT
  53. 5030  COLOR 5,4:LOCATE 21,1:PRINT"CSRLIN"STRING$(37,223)"CSRLIN";:COLOR ,0:TIME=37:CNT=2
  54. 5100  K$=STRING$(19,219):T$=LEFT$(K$,9):IF LEVEL>1 AND LEVEL <5 THEN LOCATE 11,11:PRINT K$;
  55. 5110  IF LEVEL=3 OR LEVEL=5 OR LEVEL=7 THEN FOR J=6 TO 16:LOCATE J,20:PRINT"CSRLIN";:NEXT
  56. 5112  IF LEVEL=5 OR LEVEL=7 OR LEVEL=8 THEN FOR J=6 TO 16:LOCATE J,11:PRINT"CSRLIN";:LOCATE ,29:PRINT"CSRLIN";:NEXT
  57. 5120  IF LEVEL=4 THEN LOCATE 6,11:PRINT K$;:LOCATE 16,11:PRINT K$;:FOR J=7 TO 15:LOCATE J,11:PRINT"CSRLIN";:NEXT
  58. 5130  IF LEVEL=5 THEN LOCATE 6,11:PRINT K$;
  59. 5140  IF LEVEL=6 THEN LOCATE 6,20:PRINT K$;:LOCATE 11,2:PRINT K$;:LOCATE 16,20:PRINT K$;
  60. 5150  IF LEVEL=7 THEN LOCATE 6,12:PRINT T$;:LOCATE 16,20:PRINT T$;:FOR J=6 TO 16:LOCATE J,11:PRINT"CSRLIN";:LOCATE J,29:PRINT"CSRLIN";:NEXT
  61. 5160  IF LEVEL=8 THEN LOCATE 16,2:PRINT T$;:LOCATE 6,12:PRINT T$;:LOCATE 16,20:PRINT T$;:LOCATE 6,30:PRINT T$;
  62. 5170  IF LEVEL>8 THEN FOR J=2 TO 11:LOCATE J,6:PRINT"CSRLIN";:LOCATE,16:PRINT"CSRLIN";:LOCATE,24:PRINT"CSRLIN";:LOCATE,34:PRINT"CSRLIN";:LOCATE J+9,11:PRINT"CSRLIN";:LOCATE,29:PRINT"CSRLIN";:NEXT
  63. 5400  LOCATE 22,3:COLOR 4:PRINT"<UNK! {FE22}>;:COLOR 7:PRINT" TO GO:";
  64. 5410  LOCATE 23,1:COLOR 10:PRINT"THENTHEN<0xB5!>";:COLOR 7:PRINT" TO GO:";
  65. 5420  LOCATE 24,5:PRINT"SCORE:";:COLOR 15:PRINT"      0";
  66. 5430  COLOR 7:LOCATE 22,23:COLOR 4:PRINT"<UNK! {FE22}>;:COLOR 7:PRINT" VALUE:";
  67. 5440  LOCATE 23,25:PRINT"LEVEL:";
  68. 5450  LOCATE 24,20:PRINT"HIGH SCORE:";:COLOR 15:PRINT"      0";
  69. 5500  LOCATE 21,18:COLOR 13:PRINT"CSRLINCSRLIN CSRLINCSRLIN";:FDOOR=-1:GOSUB 6600
  70. 5510  OUT 984,40:RETURN
  71. 5600  LOCATE 21,18:COLOR 5,4:PRINT"<0xDF!><0xDF!><0xDF!><0xDF!><0xDF!>";:FDOOR=0:COLOR ,0:RETURN
  72. 5700  LOCATE 1,18:COLOR 13:PRINT"CSRLINCSRLIN CSRLINCSRLIN";
  73. 5702  SOUND 55,1:SOUND 82,1:SOUND 110,1:SOUND 165,1:SOUND 220,1
  74. 5710  LOCATE 21,2:COLOR 5:PRINT STRING$(37,219);:BDOOR=-1:RETURN
  75. 6000  AX=INT(RND*36)+2:AY=INT(RND*18)+2
  76. 6010  IF SCREEN(AY,AX)<>32 THEN 6000
  77. 6020  LOCATE AY,AX:COLOR 20:PRINT"<UNK! {FE22}>;
  78. 6022  SOUND 220,0.2:SOUND 440,0.2:SOUND 880,0.2:SOUND 1760,0.2
  79. 6030  IF TIME=0 THEN LOCATE 21,2:COLOR 5,4:PRINT STRING$(37,223);:COLOR ,0:TIME=37:CNT=2
  80. 6090  RETURN
  81. 6500  TOGO=TOGO-1:IF EXTRA THEN EXTRA=EXTRA-1
  82. 6510  SCORE!=SCORE!+PLUS:IF SCORE!>=NXTWRM! THEN WORMS=WORMS+1:NXTWRM!=NXTWRM!*2:SOUND 1760,2
  83. 6590  GOSUB 6600:IF TOGO<1 THEN 5700 ELSE TIME=0:IF EXTRA THEN 6030 ELSE 6000
  84. 6600  COLOR 15:IF SCORE! THEN LOCATE 24,11:PRINT USING"#######";SCORE!*100;
  85. 6610  COLOR 15:LOCATE 23,11:PRINT WORMS;
  86. 6620  LOCATE 22,11:PRINT TOGO;
  87. 6630  LOCATE 22,31:PRINT STR$(PLUS)"00";
  88. 6640  LOCATE 23,31:PRINT LEVEL;
  89. 6650  LOCATE 24,31:PRINT USING"#######";HISCORE!*100;
  90. 6690  RETURN
  91. 7000  BDOOR=0:PLUS=PLUS+PLUS:IF NOT FIRST THEN 7100
  92. 7010  COLOR 12:K$=" BONUS: "+STR$(PLUS)+"00 ":T=19-LEN(K$)\2
  93. 7020  LOCATE 10,T:PRINT"KEY"STRING$(LEN(K$),205)"CLOSE";
  94. 7030  LOCATE 11,T:PRINT"OPEN"K$"OPEN";
  95. 7040  LOCATE 12,T:PRINT"SCREEN"STRING$(LEN(K$),205)"LOAD";
  96. 7050  SCORE=SCORE+PLUS:GOSUB 6600
  97. 7100  COLOR 10:LOCATE 1,20:PRINT"OPEN";
  98. 7110  OLD=SCREEN(TY,TX,1):IF OLD<>12 THEN LOCATE TY,TX:PRINT" ";
  99. 7120  SOUND 220,0.2
  100. 7130  TX=TX+X(D(TP)):TY=TY+Y(D(TP)):TP=(TP+1)AND 1023
  101. 7140  IF TP<>HP THEN 7100
  102. 7200  LEVEL=LEVEL+1:GOTO 800
  103. 8900  DATA"OPEN","KEY",   ,"CLOSE"
  104. 8910  DATA"LOAD","THEN","CLOSE",
  105. 8920  DATA   ,"SCREEN","OPEN","LOAD"
  106. 8930  DATA"SCREEN",   ,"KEY","THEN"
  107. 8940  DATA"SPC(","<0xB5!>","USR","PSET"
  108. 9000  COLOR 15,0:LOCATE 25,5:PRINT"<SPACE> TO PLAY, <ESC> TO EXIT";
  109. 9010  WHILE INKEY$<>"":WEND
  110. 9020  K$=INKEY$:IF K$="" THEN 9020
  111. 9030  IF K$=CHR$(27) THEN 10000
  112. 9040  IF K$<>" " THEN 9020 ELSE LOCATE 25,1:PRINTSPACE$(39);:RETURN
  113. 9100  LOCATE 25,14:COLOR 9:PRINT"Press <SPACE>";:COLOR 15:GOTO 9010
  114. 10000  RUN"menu
  115. 10900  LOCATE 10,16:COLOR 10:PRINT"KEYTHENTHENTHENTHENTHENTHENTHENTHEN<0xB5!>
  116. 10910  LOCATE,16:PRINT"OPEN";:COLOR 15:PRINT"PacWorm";:COLOR 10:PRINT"CLOSE
  117. 10920  LOCATE,16:PRINT"SCREENTHENTHENTHENTHENTHENTHENTHENLOAD":COLOR 15
  118. 10940  LOCATE 23,1:PRINT"Press ? for instructions
  119. 10950  LOCATE 24,1:PRINT"Press <SPACE> to play";
  120. 10960  LOCATE 25,1:PRINT"Press <ESC> to EXIT";
  121. 10970  RN=RN MOD 32766+1:K$=INKEY$:IF K$="" THEN 10970
  122. 10980  IF K$="?" OR K$="/" THEN RANDOMIZE RN:GOTO 11000
  123. 10982  IF K$=CHR$(27) THEN 10000
  124. 10990  IF K$<>" " THEN 10970 ELSE CLS:RANDOMIZE RN:RETURN
  125. 11000  CLS:PRINT"This is PacWorm:  ";:COLOR 10:PRINT"KEYTHENTHENTHENTHENTHENTHEN<0xB5!>":COLOR 15
  126. 11010  PRINT"This is its food:  ";:COLOR 20:PRINT"<UNK! {FE22}>:COLOR 15
  127. 11020  PRINT:PRINT"  You guide PacWorm through its world,":PRINT"but be careful!  It will die if you hit":PRINT"its head against anything but food.
  128. 11030  PRINT"  Use these keys to move PacWorm:":PRINT
  129. 11040  PRINT "ABSOLUTE:"TAB(18)"North
  130. 11050  PRINT TAB(20)CHR$(24)
  131. 11060  PRINT TAB(17)"VARPTRSOUNDBSAVESOUNDBSAVESOUNDCOLOR
  132. 11070  PRINT TAB(17)"CALL CALL8CALL CALL
  133. 11080  PRINT TAB(17)"BLOADSOUNDBEEPSOUNDBEEPSOUND<0xB4!>
  134. 11090  PRINT TAB(12)"West"CHR$(27)"CALL4CALL CALL6CALL"CHR$(26)"East
  135. 11100  PRINT TAB(17)"BLOADSOUNDBEEPSOUNDBEEPSOUND<0xB4!>
  136. 11110  PRINT TAB(17)"CALL CALL2CALL CALL
  137. 11120  PRINT TAB(17)"CLSSOUNDMOTORSOUNDMOTORSOUND'
  138. 11130  PRINT TAB(20)CHR$(25)
  139. 11140  PRINT TAB(18)"South
  140. 11150  PRINT"or RELATIVE:
  141. 11160  PRINT TAB(15)"VARPTRSOUNDSOUNDSOUNDBSAVESOUNDSOUNDSOUNDCOLOR
  142. 11170  PRINT"Turn Left PSETTHENCLOSE CALLInsCALLDelCALL KEYTHEN<0xB5!> Turn Right
  143. 11180  PRINT TAB(15)"CLSSOUNDSOUNDSOUNDMOTORSOUNDSOUNDSOUND'
  144. 11190  GOSUB 9100:CLS
  145. 11200  PRINT"  PacWorm enters its world thru the gap
  146. 11210  PRINT"at the bottom of your screen.  You then
  147. 11220  PRINT"guide it to eat the ";:COLOR 20:PRINT"<UNK! {FE22}>;:COLOR 15:PRINT" that appears at
  148. 11230  PRINT"some random location on the screen.
  149. 11240  PRINT"  But don't take too long!  The line
  150. 11250  PRINT"right below the playing field shrinks
  151. 11260  PRINT"as you spend time manuevering PacWorm
  152. 11270  PRINT"around its world.  If you take too long
  153. 11280  PRINT"three more ";:COLOR 20:PRINT"<UNK! {FE22}>;:COLOR 15:PRINT"'s appear on the screen.
  154. 11290  PRINT"  As PacWorm eats its food, it grows in
  155. 11300  PRINT"length.  Soon you will have trouble
  156. 11310  PRINT"keeping PacWorm from running into its
  157. 11320  PRINT"own tail!
  158. 11330  PRINT"  But don't worry, after eating ten ";:COLOR 20:PRINT"<UNK! {FE22}>;:COLOR 15:PRINT"'s
  159. 11340  PRINT"(and any others for being slow) PacWorm
  160. 11350  PRINT"may leave this world to reappear in the
  161. 11360  PRINT"next (more complicated) world back as
  162. 11370  PRINT"its old short self!
  163. 11380  PRINT"  You start with three PacWorms, but
  164. 11390  PRINT"you earn more at 5000, 10000, 20000,
  165. 11400  PRINT"40000, etc.  Food starts at 100 points
  166. 11410  PRINT"and doubles at each level.  Bonus is
  167. 11420  PRINT"awarded for each level the first worm
  168. 11430  PRINT"survives.";
  169. 11440  GOTO 9100
  170.